// 作用 封装  模块化



function say(company, academy, name) {
  console.log(`${company}---${academy}---${name}`);
}

console.log("函数形参的个数" + say.length); //打印函数的参数个数

//eg
function mysay(company) {
  return function (academy) {
    return function (name) {
      console.log(`${company}---${academy}---${name}`);
    };
  };
}

mysay("北京")("计算机")("lwt");


//封装
function curry(fn) {
  //记录fn参数的个数
  let len = fn.length;
  return function temp() {
    //收集调用时候传的参数 eg  mysay(1)(2)(3)
    let args = [...arguments];

    if (args.length >= len) {
      //说明是 mysay(1,2,3)的情况
      return fn(...args);
    } else {
      return function () {
        return temp(...args, ...arguments); //mysay(1)(2)(3)
        //args上一次传入的arguments的 的参数  1
        //arguments 是这一次传入的参数  2
        //再下一次让函数temp变成  mysay(1,2,3)
      };
    }
  };
}

// 再写一遍
function curry_(fn) {
  var len = fn.length;
  return function temp() {
    let args = [...arguments];
    if (args.length >= len) return fn(...args);
    else
      return function () {
        return temp(...args, ...arguments);
      };
  };
}
